package cn.iocoder.yudao.framework.business.interest.service;

import jakarta.annotation.Nullable;

import java.io.Serializable;
import java.util.Map;
import java.util.Set;

/**
 * 喜好 ServiceImpl 接口类，由子类继承
 *
 * @author 山野羡民
 */
public interface AppInterestService<SNAPSHOT extends Serializable>  {

    /**
     * 添加/取消
     *
     * @param bizId  业务编号
     * @param userId 用户编号
     * @return 取消收藏则返回 NULL
     */
    @Nullable
    Boolean toggle(Long bizId, Long userId);

    /**
     * 是否已喜好
     *
     * @param bizId  业务编号
     * @param userId  用户编号
     * @return 是否已喜好
     */
    boolean isTrue(Long bizId, Long userId);

    /**
     * 喜好状态
     *
     * @param bizIds 业务编号数组
     * @param userId 用户编号
     * @return 喜好状态
     */
    Map<Long, Boolean> getStateMap(Set<Long> bizIds, Long userId);

    /**
     * 获取喜好数量
     *
     * @param userId 用户编号
     *
     * @return 数量
     */
    Integer getCount(Long userId);

    /**
     * 校验业务数据是否存在
     *
     * @param bizId  业务编号
     * @return 业务数据
     */
    SNAPSHOT validateSnapshotExists(Long bizId);

}
